package com.zy.explore.sys.domain.mybatis.entity;

import com.zy.explore.common.infrastructure.base.mybatis.MpBaseEntity;
import com.zy.explore.common.infrastructure.util.StrUtil;
import com.zy.explore.sys.interfaces.frm.DictDataQueryFrm;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;

import javax.persistence.Table;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.util.Date;
import org.springframework.util.StringUtils;
import java.util.stream.Collectors;

/**
 * 表(sys_dict_data)对应的Mybatis ORM实体对象
 *
 * @author 🇨🇳中国印🇨🇳
 * @date 2022年02月01日 17:18:27
 */
@Slf4j
@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("sys_dict_data")
@Table(name = "sys_dict_data")
public class DictData extends MpBaseEntity<DictData, String> {

    /**
     * 主键
     */
    @Id
    @TableId(type = IdType.ID_WORKER)
    @Column(name = "id")
    private String id;

    /**
     * 字典类型id
     */
    @Column(name = "type_id")
    private Long typeId;

    /**
     * 值
     */
    @Column(name = "value")
    private String value;

    /**
     * 编码
     */
    @Column(name = "code")
    private String code;

    /**
     * 排序
     */
    @Column(name = "sort")
    private Integer sort;

    /**
     * 备注
     */
    @Column(name = "remark")
    private String remark;

    /**
     * 状态（字典 0正常 1停用 2删除）
     */
    @Column(name = "status")
    private Integer status;

    /**
     * 创建时间
     */
    @Column(name = "create_time")
    private Date createTime;

    /**
     * 创建人
     */
    @Column(name = "create_user")
    private Long createUser;

    /**
     * 更新时间
     */
    @Column(name = "update_time")
    private Date updateTime;

    /**
     * 更新人
     */
    @Column(name = "update_user")
    private Long updateUser;


    /**
     * 组装查询条件
     *
     * @param frm 请求参数
     * @return {@link Wrapper<DictData> }
     */
    public static Wrapper<DictData> getWrapper(DictDataQueryFrm frm) {
        // TODO 请按实际需求组装查询条件
        log.warn("TODO 请按实际需求组装查询条件");
        if (frm.getPageNum() == null || frm.getPageNum() <= 0) {
            frm.setPageNum(1);
        }
        if (frm.getPageSize() == null || frm.getPageSize() <= 0) {
            frm.setPageSize(10);
        }
        Wrapper<DictData> wrapper = new EntityWrapper<>();
        if(frm.getId() != null) {
            wrapper.eq(StrUtil.humpToUnderline("id"), frm.getId());
        }
        if(frm.getTypeId() != null) {
            wrapper.eq(StrUtil.humpToUnderline("typeId"), frm.getTypeId());
        }
        if (!StringUtils.isEmpty(frm.getValue())) {
            wrapper.like(StrUtil.humpToUnderline("value"), frm.getValue() + "%");
        }
        if (!StringUtils.isEmpty(frm.getCode())) {
            wrapper.like(StrUtil.humpToUnderline("code"), frm.getCode() + "%");
        }
        if(frm.getSort() != null) {
            wrapper.eq(StrUtil.humpToUnderline("sort"), frm.getSort());
        }
        if (!StringUtils.isEmpty(frm.getRemark())) {
            wrapper.like(StrUtil.humpToUnderline("remark"), frm.getRemark() + "%");
        }
        if(frm.getStatus() != null) {
            wrapper.eq(StrUtil.humpToUnderline("status"), frm.getStatus());
        }
        if(!StringUtils.isEmpty(frm.getCreateTimeBegin())) {
            wrapper.ge(StrUtil.humpToUnderline("createTime"), frm.getCreateTimeBegin());
        }
        if(!StringUtils.isEmpty(frm.getCreateTimeEnd())) {
            wrapper.le(StrUtil.humpToUnderline("createTime"), frm.getCreateTimeEnd());
        }
        if(frm.getCreateUser() != null) {
            wrapper.eq(StrUtil.humpToUnderline("createUser"), frm.getCreateUser());
        }
        if(!StringUtils.isEmpty(frm.getUpdateTimeBegin())) {
            wrapper.ge(StrUtil.humpToUnderline("updateTime"), frm.getUpdateTimeBegin());
        }
        if(!StringUtils.isEmpty(frm.getUpdateTimeEnd())) {
            wrapper.le(StrUtil.humpToUnderline("updateTime"), frm.getUpdateTimeEnd());
        }
        if(frm.getUpdateUser() != null) {
            wrapper.eq(StrUtil.humpToUnderline("updateUser"), frm.getUpdateUser());
        }
        return wrapper;
    }
}